<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="../css/reset.css">
    <style>
        .list {
            background-color: grey;
            padding: 20px 0;
        }

        li {
            line-height: 40px;
            border: 1px dashed #333;
            background-color: pink;
            margin-top: 10px;
        }

        p,
        span {
            display: block;
            line-height: 40px;
            border: 1px dashed #333;
            background-color: orange;
            margin-top: 10px;
        }
    </style>
</head>

<body>
    <!-- .wrap>button{新增}+ul.list>li*6{$$} -->
    <div class="wrap">
        <button class="btn">新增</button>
        <button class="btn">删除</button>
        <ul class="list">
            <li id="first">01</li>
            <li class="second">02</li>
            <li>03</li>
            <li class="mid four">04</li>
            <li>05</li>
            <li name="last">06</li>
        </ul>
    </div>
</body>
<script>
    var btn1 = document.getElementsByClassName("btn")[0];
    var btn2 = document.getElementsByClassName("btn")[1];
    var list = document.getElementsByClassName("list")[0];
    var mid = document.getElementsByClassName("mid")[0];

    var liList = list.getElementsByTagName("li");
    console.log("liList:", liList);

    // 点击按钮  新增li放到 .list中
    btn1.onclick = function () {
        // 新增li
        var li = document.createElement("li");
        li.innerText = "我是新增的li";  //新增内容
        li.className = "newLi"; // 绑定属性
        li.style.backgroundColor = randColor(); //修改样式
        list.appendChild(li);
        console.log("liList:", liList);
    }

    btn2.onclick = function () {
        list.lastElementChild.remove();
    }

    // 事件委托
    // 利用事件冒泡的原理(同类型的事件),将子(代)元素的事件,委托给父元素,由父元素代为执行

    // 事件委托的实现步骤
    // 1. 将子(代)元素的事件,委托给父元素 => 父元素绑定相同类型的事件
    // 2. 通过e.target(事件源) 获取触发事件的元素
    // 3. 判断触发事件的元素(事件源) 是否是委托事件的子元素
    //    a. 如果元素类型不同 => 判断元素类型
    //    b. 如果元素类型相同  => 根据元素自身属性区分

    // 事件委托的优点
    // 1. 将子(代)元素的事件,委托给父元素,由父元素代为执行 => 只用给父元素绑定一个相同类型的事件即可  => 节省内存
    // 2. 可以给未来生成的元素绑定事件  => 无论你什么时候生成,只要在该父元素中 都归它关
    // 3. 提高代码的执行效率,代码更加清晰

    // 点击li 打印下标和内容
    list.onclick = function (e) {
        var e = e || window.event;
        var target = e.target;
        // console.log(this); // this -> 绑定事件的元素 .list
        // console.log("点击了list", target, target.tagName.toLowerCase());

        var index = Array.from(liList).indexOf(target);
        // console.log("li触发事件", index, target.textContent);

        // console.log(target);
        if (target.id == "first") {
            console.log("点击了first", index);
        } else if (target.className == "second") {
            console.log("点击了second", index);
        } else if (target.classList.contains("four")) {
            console.log("点击了four", index);
        } else if (target.getAttribute("name") == "last") {
            console.log("点击了last", index);
        } else if (target.className == "newLi") {
            console.log("点击了新增的li", index);
        } else {
            console.log("点击了其他的li", index);
        }
    }



























































    // 颜色表示方式
    // 1. 颜色单词  red green blue
    // 2. 16进制   #ffffff   16(0 1 2 3 4 5 6 7 8 9 a b c d e f)
    // 3. ragb     rgba(255,255,255,1);
    function randColor() {
        var str = "0123456789abcdef";
        var colorStr = "#"
        for (var i = 0; i < 6; i++) {
            // var index = Math.round(Math.random() * (str.length - 1));
            var index = Math.floor(Math.random() * str.length);
            var char = str.charAt(index);
            colorStr += char;
        }
        return colorStr;
    }







</script>

</html>